package com.ruoyi.system.service;

import java.util.List;
import java.util.Map;
import com.ruoyi.system.domain.CreditUserInfo;

/**
 * 用户信用信息Service接口
 * 
 * @author ruoyi
 * @date 2024-01-26
 */
public interface ICreditUserInfoService 
{
    /**
     * 查询用户信用信息
     * 
     * @param userId 用户信用信息主键
     * @return 用户信用信息
     */
    public CreditUserInfo selectCreditUserInfoByUserId(Long userId);

    /**
     * 查询用户信用信息列表
     * 
     * @param creditUserInfo 用户信用信息
     * @return 用户信用信息集合
     */
    public List<CreditUserInfo> selectCreditUserInfoList(CreditUserInfo creditUserInfo);

    /**
     * 新增用户信用信息
     * 
     * @param creditUserInfo 用户信用信息
     * @return 结果
     */
    public int insertCreditUserInfo(CreditUserInfo creditUserInfo);

    /**
     * 修改用户信用信息
     * 
     * @param creditUserInfo 用户信用信息
     * @return 结果
     */
    public int updateCreditUserInfo(CreditUserInfo creditUserInfo);

    /**
     * 批量删除用户信用信息
     * 
     * @param userIds 需要删除的用户信用信息主键集合
     * @return 结果
     */
    public int deleteCreditUserInfoByUserIds(Long[] userIds);

    /**
     * 删除用户信用信息信息
     * 
     * @param userId 用户信用信息主键
     * @return 结果
     */
    public int deleteCreditUserInfoByUserId(Long userId);

    /**
     * 根据手机号查询用户信用信息
     * 
     * @param phonenumber 手机号
     * @return 用户信用信息
     */
    public CreditUserInfo selectCreditUserInfoByPhonenumber(String phonenumber);

    /**
     * 根据身份证号查询用户信用信息
     * 
     * @param idCard 身份证号
     * @return 用户信用信息
     */
    public CreditUserInfo selectCreditUserInfoByIdCard(String idCard);

    /**
     * 检查身份证号唯一性
     * 
     * @param creditUserInfo 用户信用信息
     * @return 结果 true为唯一，false为不唯一
     */
    public boolean checkIdCardUnique(CreditUserInfo creditUserInfo);

    /**
     * 更新用户信用分
     * 
     * @param userId 用户ID
     * @param newScore 新信用分
     * @param reason 变更原因
     * @return 结果
     */
    public int updateCreditScore(Long userId, Integer newScore, String reason);

    /**
     * 获取用户信用统计信息
     * 
     * @return 统计信息
     */
    public Map<String, Object> getCreditStatistics();

    /**
     * 获取用户详细信息（包含关联的系统用户信息）
     * 
     * @param userId 用户ID
     * @return 用户详细信息
     */
    public Map<String, Object> getUserDetailInfo(Long userId);

    /**
     * 批量调整用户信用分
     * 
     * @param adjustments 调整信息列表
     * @return 调整结果
     */
    public Map<String, Object> batchAdjustCreditScore(List<Map<String, Object>> adjustments);

    /**
     * 获取用户信用分变化历史
     * 
     * @param userId 用户ID
     * @param pageNum 页码
     * @param pageSize 页大小
     * @return 变化历史
     */
    public Map<String, Object> getCreditScoreHistory(Long userId, Integer pageNum, Integer pageSize);

    /**
     * 初始化用户信用信息
     * 
     * @param userId 用户ID
     * @param idCard 身份证号
     * @return 结果
     */
    public int initUserCreditInfo(Long userId, String idCard);

    /**
     * 更新用户信用分（带任务信息）
     * 
     * @param userId 用户ID
     * @param scoreChange 分数变化
     * @param taskType 任务类型
     * @param reason 变更原因
     * @param taskId 任务ID（可为null）
     * @return 结果
     */
    public boolean updateUserCreditScore(Long userId, Integer scoreChange, String taskType, String reason, Long taskId);
} 